﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Cliente_DozenContext;
using Telerik.Web.Mvc;
using Telerik.Web.Mvc.Extensions;
using Telerik.Web.Mvc.Configuration;
using Telerik.Web.Mvc.UI;
using System.Web.Routing;
using System.IO;

namespace Sistema_de_Gestion_DOZEN.Controllers
{
    public class GridClienteController : Controller
    {

        private Cliente_DozenDataContext dbCliente = new Cliente_DozenDataContext();

        [HttpPost]
        public ActionResult Subir(IEnumerable<HttpPostedFileBase> attachments)
        {
            if (attachments != null)
            {

                foreach (var uploadedFile in attachments)
                {
                    var fileName = Path.GetFileName(uploadedFile.FileName);
                    var physicalPath = Path.Combine(Server.MapPath("~/Content"), fileName);

                    // The files are not actually saved in this demo
                    uploadedFile.SaveAs(physicalPath);
                }


            }

            // Return empty response so signify success
            return Content("");
        }

        //removing and image
        public ActionResult Remove(string[] fileNames)
        {
            foreach (var fullName in fileNames)
            {
                var fileName = Path.GetFileName(fullName);
                var physicalPath = Path.Combine(Server.MapPath("~/Content"), fileName);

                // TODO: Verify user permissions

                if (System.IO.File.Exists(physicalPath))
                {
                    System.IO.File.Delete(physicalPath);
                }
            }

            // Return an empty string to signify success
            return Content("");
        }
        //
        // GET: /GridCliente/
        // Muestra el grid con todos los clientes registrados
        public ActionResult Index(GridEditMode? mode, GridButtonType? type)
        {
            ViewData["mode"] = mode ?? GridEditMode.PopUp;
            ViewData["type"] = type ?? GridButtonType.ImageAndText;
            // Se obtienen datos del modelo que serán mostrados en la vista y se agregan en el ViewBag
            decimal ultimoCodigo = (from cli in dbCliente.Cliente_Clientes
                                    select cli.Cliente_ClienteCod).Max();
            ViewBag.codigo = "" + (ultimoCodigo + 1);
            var tipoClientes = from a in dbCliente.Cliente_TipoClientes select a;
            var planes = from plans in dbCliente.Cliente_Plans select plans;
            List<string> lista = new List<string>();
            lista.Add("Masculino");
            lista.Add("Femenino");
            ViewBag.sexos = lista;
            ViewBag.tipoClientes = tipoClientes.ToList();
            ViewBag.planes = planes.ToList();


            //Se seleccionan todos los clientes a ser mostrados en el grid
            var clientes = from a in dbCliente.Cliente_Clientes select a;
            return View(clientes);
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Save(int id, GridEditMode mode, GridButtonType type)
        {
            ViewData["mode"] = mode;
            ViewData["type"] = type;

            //Crea un nuevo cliente y se setea la propiedad coddigo
            Cliente_Cliente cliente = new Cliente_Cliente
            {
                Cliente_ClienteCod = id
            };
            //TryUpdateModel :Actualiza la instancia de modelo especificada con los valores del proveedor de valores actual del controlador.
            if (TryUpdateModel(cliente))
            {
                // Se selecciona el cliente a ser modificado en la base de datos.
                var query =
                from clienteA in dbCliente.Cliente_Clientes
                where clienteA.Cliente_ClienteCod == id
                select clienteA;

                //Se actualizan los valores de la base de datos del cliente modificado
                foreach (Cliente_Cliente clienteA in query)
                {
                    clienteA.Cliente_ClienteNombre = cliente.Cliente_ClienteNombre;
                    clienteA.Cliente_ClienteApellidos = cliente.Cliente_ClienteApellidos;
                    clienteA.Cliente_ClienteFechaNacimiento = cliente.Cliente_ClienteFechaNacimiento;
                    clienteA.Cliente_ClienteSexo  = cliente.Cliente_ClienteSexo;
                    clienteA.Cliente_ClienteEmail = cliente.Cliente_ClienteEmail;
                    clienteA.Cliente_ClienteTelefonoEmergencia = cliente.Cliente_ClienteTelefonoEmergencia;
                    clienteA.Cliente_ClienteTelefonoContacto = cliente.Cliente_ClienteTelefonoContacto;
                }
                dbCliente.SubmitChanges(); // Se actualizan los datos
                //route values defining the grid state - current page, sort expression, filter etc.
                RouteValueDictionary routeValues = this.GridRouteValues();
                // add the editing mode to the route values
                routeValues.Add("mode", mode);
                routeValues.Add("type", type);
                return RedirectToAction("Index", routeValues);
            }
            //The model is invalid - render the current view to show any validation errors
            return View("listar");

        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Insert(GridEditMode mode, GridButtonType type)
        {
            ViewData["mode"] = mode;
            ViewData["type"] = type;
            decimal ultimoCodigo = (from cli in dbCliente.Cliente_Clientes
                                    select cli.Cliente_ClienteCod).Max();
            //Create a new instance of the EditableProduct class.
            Cliente_Cliente cliente = new Cliente_Cliente
            {

                Cliente_ClienteCod = (int)(ultimoCodigo + 1),
                Cliente_ClienteFechaNacimiento = DateTime.Now

            };

            //Perform model binding (fill the product properties and validate it).
            if (TryUpdateModel(cliente))
            {
                //The model is valid - insert the product and redisplay the grid.
                dbCliente.Cliente_Clientes.InsertOnSubmit(cliente);
                //GridRouteValues() is an extension method which returns the 
                //route values defining the grid state - current page, sort expression, filter etc.
                RouteValueDictionary routeValues = this.GridRouteValues();
                // add the editing mode to the route values
                routeValues.Add("mode", mode);
                return RedirectToAction("Index", routeValues);
            }
            //The model is invalid - render the current view to show any validation errors
            return View("Index");
        }

    }
}
